<?php

namespace app\common\logic;

use sms\ccp\CCPRestSmsSDK;
use think\Db;

/**
 * 发短信 服务
 * Class SendLogic
 */
class SendLogic extends Logic
{

    /**
     * 发送短信验证码
     * @param $phone
     * @param $content (模板ID)
     * @return array
     */
    public static function smsCode($phone, $content = '', $method = '')
    {
        if (empty($content)) return ['code' => 0, 'msg' => '短信模板ID出错'];

        //TODO:判断每小时发送条数
        $start_hour = strtotime(date('Y-m-d H') . ':00:00');
        $hour_counts = db('verify')
            ->where(['phone' => $phone, 'method' => $method, 'send_time' => [['>=', $start_hour], ['<=', ($start_hour + 3600)]]])
            ->count();

        if ($hour_counts >= config('sms_sent_hour_number')) return ['code' => 0, 'msg' => '您的帐户操作过于频繁，请在一小时后再尝试。'];

        //生成验证码
        $code = rand_string(6, 1);

        //替换文本
//        $content = str_replace(array('#CODE#'), array($code), $content);

        //入库
        $flag = db('verify')->insertGetId([
            'phone' => $phone,
            'code' => $code,
            'send_time' => $_SERVER['REQUEST_TIME'],
            'expired_time' => ($_SERVER['REQUEST_TIME'] + 300),
            'type' => 2,
            'method' => $method
        ]);
        if ($flag <= 0) return ['code' => 0, 'msg' => '短信写入失败'];

        //测试环境不发送短信
        if (config('app_debug') == true) return ['code' => 1, 'msg' => 'SUCCESS:' . $code];

        /**
         * 发送模板短信
         * @param string to 手机号码集合,用英文逗号分开
         * @param [] datas 内容数据 格式为数组 例如：array('Marry','Alon')，如不需替换请填 null
         * @param string $tempId 模板Id,测试应用和未上线应用使用测试模板请填写1，正式应用上线后填写已申请审核通过的模板ID
         */
        $rest = new CCPRestSmsSDK(
            config('sms.server_ip'),
            config('sms.server_port'),
            config('sms.soft_version')
        );

        $rest->setAccount(config('sms_account_sid'), config('sms_account_token'));
        $rest->setAppId(config('sms_app_id'));

        if (config('app_debug') == true) {
            //Demo调用
            //**************************************举例说明***********************************************************************
            //*假设您用测试Demo的APP ID，则需使用默认模板ID 1，发送手机号是13800000000，传入参数为6532和5，则调用方式为           *
            //*result = sendTemplateSMS("13800000000" ,array('6532','5'),"1");
            //*则13800000000手机号收到的短信内容是：【云通讯】您使用的是云通讯短信模板，您的验证码是6532，请于5分钟内正确输入     *
            //*********************************************************************************************************************
            $result = $rest->sendTemplateSMS($phone, [$code, '5'], 1);
        } else {
            // 发送模板短信 config('sms_test_tmp_id') //默认为 测试模板ID
            $result = $rest->sendTemplateSMS($phone, [$code, '5'], $content);
        }

        if (is_null($result)) {
            trace('短信接口报错：' . json_encode($result, JSON_UNESCAPED_UNICODE), 'error');
            return ['code' => 0, 'msg' => '短信接口出错，请联系客服MM', 'data' => ''];
        }

        if ($result->statusCode != 0) {
            trace('短信发送失败：' . json_encode($result, JSON_UNESCAPED_UNICODE), 'error');
            return ['code' => 0, 'msg' => '短信发送失败', 'data' => ''];
        } else {
            trace('短信发送成功：' . json_encode($result, JSON_UNESCAPED_UNICODE), 'debug');
            return ['code' => 1, 'msg' => '短信发送成功', 'data' => ''];
        }
    }


    /**
     * 发短信（uid）
     * @param $uids
     * @return bool
     */
    public static function sendSmsByUid($uids = [], $replace = [])
    {
        foreach ($uids as $v) {
//            $phone =
        }

    }

    /**
     * 发短信 （phone）
     * @param array $phones
     * @return array
     */
    public static function sendSmsByPhone($phones = [])
    {
        return [];
    }

    /**
     * 真正发短信
     * @param $phone
     * @param array $replace
     */
    public static function sms($phone, $replace = [])
    {

    }

}